<%@ page language="java" import="up7.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@	page import="net.sf.json.*" %>
<%@ page import="up7.biz.*" %>
<%@	page import="up7.model.*" %>
<%@	page import="up7.utils.*" %>
<%@	page import="up7.database.*" %>
<%@ page import="com.google.gson.Gson" %>
<%@ page import="org.apache.commons.lang.StringUtils" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="up7.database.sql.SqlFile" %>
<%
	out.clear();
	/*
		所有单个文件均以md5模式存储。
		更新记录：
			2023-02-28 远程路径转为相对路径
			2017-05-05 取消添加数据库操作，在文件上传完后添加到数据库
			2016-04-09 完善逻辑。
			2016-01-07
				返回值改为JSON
				优化导入包
				优化变量名称
			2015-07-30 取消文件夹层级结构存储规则，改为使用日期存储规则，文件夹层级结构仅保存在数据库中。
			2012-06-29 增加创建文件逻辑，
			2012-05-24 完善
		JSON格式化工具：http://tool.oschina.net/codeformat/json
	*/
	WebBase web = new WebBase(pageContext);
	String uid 			= web.reqStr("uid");
	String id			= web.queryString("id");
	String md5       	= web.queryString("md5");
	long lenLoc 		= web.reqLong("lenLoc");//数字化的文件大小。12021
	long lenLocSec 		= web.reqLong("lenLocSec");
	String sizeLoc 		= web.queryString("sizeLoc");//格式化的文件大小。10MB
	int blockSize 		= web.reqInt("blockSize",5242880);  //块大小
	int blockCount		= web.reqInt("blockCount");
	String token     	= web.queryString("token");
	String callback     = web.queryString("callback");
	String pathLoc		= web.reqStrDecode("pathLoc");
	String storage    	= web.reqStr("storage");
	String objectKey    = web.reqStr("objectKey");
	String objectUrl    = web.reqStr("objectUrl");
	String encryptAlgorithm = web.reqStr("encrypt-algorithm");

	//参数为空
	if (	StringUtils.isBlank(sizeLoc))
	{
		out.write(callback + "({\"value\":null})");
		return;
	}

	FileInf fileSvr      = new FileInf();
	fileSvr.id           = id;
	fileSvr.uid          = uid;
	fileSvr.nameLoc      = PathTool.getName(pathLoc);
	fileSvr.pathLoc      = pathLoc;
	fileSvr.lenLoc       = lenLoc;
	fileSvr.lenLocSec 	 = lenLocSec;
	fileSvr.sizeLoc      = sizeLoc;
	fileSvr.blockSize    = blockSize;
	fileSvr.blockCount	 = blockCount;
	fileSvr.nameSvr      = fileSvr.nameLoc;
	fileSvr.storage		 = storage;
	fileSvr.objectKey	 = objectKey;
	fileSvr.objectUrl	 = objectUrl;
	fileSvr.encryptAgo 	 = encryptAlgorithm;

	//所有单个文件均以guid方式存储
	PathGuidBuilder pb   = new PathGuidBuilder();
	fileSvr.pathSvr      = pb.genFile(fileSvr);

	FileInf fileExist = SqlFile.build().exist_file(md5);
	//数据库已存在相同文件，且有上传进度，则直接使用此信息
	if(fileExist!=null)
	{
		fileSvr.nameSvr    = fileExist.nameSvr;
		fileSvr.pathSvr    = fileExist.pathSvr;
		fileSvr.perSvr     = fileExist.perSvr;
		fileSvr.lenSvr     = fileExist.lenSvr;
		fileSvr.complete   = fileExist.complete;
		fileSvr.encrypt    = fileExist.encrypt;
		fileSvr.encryptAgo = fileExist.encryptAgo;
		fileSvr.lenLocSec  = fileExist.lenLocSec;
		fileSvr.blockSize  = fileExist.blockSize;
		fileSvr.object_id  = fileExist.object_id;
        fileSvr.objectKey  = fileExist.objectKey;
        fileSvr.objectUrl  = fileExist.objectUrl;
        fileSvr.storage    = fileExist.storage;
		SqlFile.build().Add(fileSvr);

		//触发事件
		up7_biz_event.file_create_same(fileSvr);
	}//此文件不存在
	else
	{
		FileBlockWriter fw = new FileBlockWriter();
		if(fileSvr.storage=="io") fw.make(fileSvr);
		
		SqlFile.build().Add(fileSvr);

		//触发事件
		up7_biz_event.file_create(fileSvr);
	}

	//将路径转换成相对路径
	fileSvr.pathSvr = pb.absToRel(fileSvr.pathSvr);

	Gson gson = new Gson();
	String json = gson.toJson(fileSvr);
	json = PathTool.url_encode(json);
	json = callback + "({\"value\":\"" + json + "\"})";//返回jsonp格式数据。
	out.write(json);
%>